Software application performance is a factor considered by potential purchasers and users of software. Performance analysis and performance improvement have become part of the software development and testing process. One way of measuring the performance of software is by using hardware performance counters in a computer that executes the software. However, the use of hardware performance counters may not provide an indication of how performance varies over time or how performance relates to particular software source code.
Performance analysis of software is further complicated since many modern computing systems execute applications on multiple processing cores and across multiple processing threads. Thus, understanding the performance impact of each individual thread or core is often a complicated and time-consuming task.